{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4521\n",
      "43\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>balance</th>\n",
       "      <th>day</th>\n",
       "      <th>duration</th>\n",
       "      <th>campaign</th>\n",
       "      <th>pdays</th>\n",
       "      <th>previous</th>\n",
       "      <th>job_blue-collar</th>\n",
       "      <th>job_entrepreneur</th>\n",
       "      <th>job_housemaid</th>\n",
       "      <th>...</th>\n",
       "      <th>month_jun</th>\n",
       "      <th>month_mar</th>\n",
       "      <th>month_may</th>\n",
       "      <th>month_nov</th>\n",
       "      <th>month_oct</th>\n",
       "      <th>month_sep</th>\n",
       "      <th>poutcome_other</th>\n",
       "      <th>poutcome_success</th>\n",
       "      <th>poutcome_unknown</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.161765</td>\n",
       "      <td>0.068455</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.024826</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.205882</td>\n",
       "      <td>0.108750</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.071500</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.389908</td>\n",
       "      <td>0.16</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.235294</td>\n",
       "      <td>0.062590</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.059914</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.379587</td>\n",
       "      <td>0.04</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.161765</td>\n",
       "      <td>0.064281</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.064548</td>\n",
       "      <td>0.061224</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.588235</td>\n",
       "      <td>0.044469</td>\n",
       "      <td>0.133333</td>\n",
       "      <td>0.073486</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 43 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        age   balance       day  duration  campaign     pdays  previous  \\\n",
       "0  0.161765  0.068455  0.600000  0.024826  0.000000  0.000000      0.00   \n",
       "1  0.205882  0.108750  0.333333  0.071500  0.000000  0.389908      0.16   \n",
       "2  0.235294  0.062590  0.500000  0.059914  0.000000  0.379587      0.04   \n",
       "3  0.161765  0.064281  0.066667  0.064548  0.061224  0.000000      0.00   \n",
       "4  0.588235  0.044469  0.133333  0.073486  0.000000  0.000000      0.00   \n",
       "\n",
       "   job_blue-collar  job_entrepreneur  job_housemaid ...  month_jun  month_mar  \\\n",
       "0                0                 0              0 ...          0          0   \n",
       "1                0                 0              0 ...          0          0   \n",
       "2                0                 0              0 ...          0          0   \n",
       "3                0                 0              0 ...          1          0   \n",
       "4                1                 0              0 ...          0          0   \n",
       "\n",
       "   month_may  month_nov  month_oct  month_sep  poutcome_other  \\\n",
       "0          0          0          1          0               0   \n",
       "1          1          0          0          0               0   \n",
       "2          0          0          0          0               0   \n",
       "3          0          0          0          0               0   \n",
       "4          1          0          0          0               0   \n",
       "\n",
       "   poutcome_success  poutcome_unknown  y  \n",
       "0                 0                 1  0  \n",
       "1                 0                 0  0  \n",
       "2                 0                 0  0  \n",
       "3                 0                 1  0  \n",
       "4                 0                 1  0  \n",
       "\n",
       "[5 rows x 43 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.neural_network import MLPClassifier\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import winsound\n",
    "\n",
    "# df = pd.read_csv(\"../Data/bank.csv\", sep=\";\")\n",
    "df = pd.read_csv(\"../Data/Cleaned/bank_cleaned.csv\")\n",
    "print(len(df))\n",
    "print(len(df.columns))\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "4\n",
      "6\n",
      "8\n",
      "10\n",
      "(1) ['hidden_layer = 2', 0.90274093722369586]\n",
      "(2) ['hidden_layer = 2, 2', 0.905393457117595]\n",
      "(3) ['hidden_layer = 2, 2, 2', 0.88770999115826699]\n",
      "(4) ['hidden_layer = 2, 2, 2, 2', 0.90185676392572944]\n",
      "(5) ['hidden_layer = 2, 2, 2, 2, 2', 0.90008841732979661]\n",
      "(6) ['hidden_layer = 4', 0.90274093722369586]\n",
      "(7) ['hidden_layer = 4, 4', 0.90362511052166228]\n",
      "(8) ['hidden_layer = 4, 4, 4', 0.90097259062776303]\n",
      "(9) ['hidden_layer = 4, 4, 4, 4', 0.89920424403183019]\n",
      "(10) ['hidden_layer = 4, 4, 4, 4, 4', 0.8885941644562334]\n",
      "(11) ['hidden_layer = 6', 0.905393457117595]\n",
      "(12) ['hidden_layer = 6, 6', 0.90981432360742709]\n",
      "(13) ['hidden_layer = 6, 6, 6', 0.90627763041556142]\n",
      "(14) ['hidden_layer = 6, 6, 6, 6', 0.90097259062776303]\n",
      "(15) ['hidden_layer = 6, 6, 6, 6, 6', 0.89213085764809907]\n",
      "(16) ['hidden_layer = 8', 0.90716180371352784]\n",
      "(17) ['hidden_layer = 8, 8', 0.90981432360742709]\n",
      "(18) ['hidden_layer = 8, 8, 8', 0.90274093722369586]\n",
      "(19) ['hidden_layer = 8, 8, 8, 8', 0.89920424403183019]\n",
      "(20) ['hidden_layer = 8, 8, 8, 8, 8', 0.89124668435013266]\n",
      "(21) ['hidden_layer = 10', 0.9045092838196287]\n",
      "(22) ['hidden_layer = 10, 10', 0.91335101679929265]\n",
      "(23) ['hidden_layer = 10, 10, 10', 0.90274093722369586]\n",
      "(24) ['hidden_layer = 10, 10, 10, 10', 0.89832007073386388]\n",
      "(25) ['hidden_layer = 10, 10, 10, 10, 10', 0.90185676392572944]\n",
      "best score =  (22, 'hidden_layer = 10, 10', 0.91335101679929265)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2bd6f878320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "input_neurons = len(df.columns) # == 43\n",
    "# hidden_layer = [10, 20, 30, input_neurons, int(input_neurons*1.5), input_neurons*2, input_neurons*3, input_neurons*4]\n",
    "# hidden_layer = [10, 20]\n",
    "hidden_layer = [i*2 for i in range(1,6)]\n",
    "\n",
    "names = []\n",
    "for layer in hidden_layer:\n",
    "    print(layer)\n",
    "    names.append(\"hidden_layer = %s\"%(layer))\n",
    "    names.append(\"hidden_layer = %s, %s\"%(layer, layer))\n",
    "    names.append(\"hidden_layer = %s, %s, %s\"%(layer, layer, layer))\n",
    "    names.append(\"hidden_layer = %s, %s, %s, %s\"%(layer, layer, layer, layer))\n",
    "    names.append(\"hidden_layer = %s, %s, %s, %s, %s\"%(layer, layer, layer, layer, layer))\n",
    "\n",
    "classifiers = []\n",
    "for layer in hidden_layer:\n",
    "    classifiers.append(MLPClassifier(hidden_layer_sizes=(layer,), random_state=1, max_iter=500))\n",
    "    classifiers.append(MLPClassifier(hidden_layer_sizes=(layer,layer), random_state=1,max_iter=500))\n",
    "    classifiers.append(MLPClassifier(hidden_layer_sizes=(layer,layer,layer), random_state=1, max_iter=500))\n",
    "    classifiers.append(MLPClassifier(hidden_layer_sizes=(layer,layer,layer,layer), random_state=1, max_iter=500))\n",
    "    classifiers.append(MLPClassifier(hidden_layer_sizes=(layer,layer,layer,layer,layer), random_state=1, max_iter=500))\n",
    "\n",
    "X = df.drop('y',axis=1)\n",
    "y = df['y']\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y)#, test_size=.4)\n",
    "\n",
    "i = 0\n",
    "ilist = []\n",
    "best_score = None\n",
    "scores = []\n",
    "for name, clf in zip(names, classifiers):\n",
    "    clf.fit(X_train, y_train)\n",
    "    score = clf.score(X_test, y_test)\n",
    "    i+=1\n",
    "    if best_score is None:\n",
    "        best_score = i, name, score\n",
    "    if score > best_score[2]:\n",
    "        best_score = i, name, score\n",
    "\n",
    "\n",
    "    ilist.append(i)\n",
    "    print(\"(%s)\"%(i), [name, score])\n",
    "#         print(\"(%s)\"%(i), name, \"\\t\\t\\t score = \", score)\n",
    "\n",
    "    scores.append(score)\n",
    "\n",
    "    # alpha = 1e-05 | score =  0.90450928382\n",
    "    # alpha = 0.001 | score =  0.909814323607\n",
    "    # alpha = 0.1 | score =  0.909814323607\n",
    "    # alpha = 10.0 | score =  0.88240495137\n",
    "    # alpha = 1000.0 | score =  0.88240495137\n",
    "    \n",
    "#     (1) ['alpha = 1e-06', 0.89213085764809907]\n",
    "#     (2) ['alpha = 1e-05', 0.89213085764809907]\n",
    "#     (3) ['alpha = 0.0001', 0.89036251105216624]\n",
    "#     (4) ['alpha = 0.001', 0.89213085764809907]\n",
    "#     (5) ['alpha = 0.01', 0.89124668435013266]\n",
    "#     (6) ['alpha = 0.1', 0.90097259062776303]\n",
    "#     (7) ['alpha = 1.0', 0.89920424403183019]\n",
    "#     best score =  (6, 'alpha = 0.1', 0.90097259062776303)\n",
    "\n",
    "print(\"best score = \", best_score)\n",
    "\n",
    "plt.plot(ilist, scores)\n",
    "plt.show()\n",
    "\n",
    "winsound.Beep(300,300)\n",
    "winsound.Beep(400,300)\n",
    "winsound.Beep(300,300)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
